import type { UserInfo } from '@vben/types';

import type { PageResult } from './permission';

import { requestClient } from '#/api/request';

/**
 * 用户数据结构
 */
export interface User {
  id?: number;
  username: string;
  password?: string;
  nickname?: string;
  email?: string;
  phone?: string;
  avatar?: string;
  gender?: number;
  status: number;
  createBy?: string;
  updateBy?: string;
  createTime?: string;
  updateTime?: string;
  createName?: string;
  updateName?: string;
  roleIds?: number[];
  roles?: string[];
  roleNames?: string[];
}

/**
 * 用户查询参数
 */
export interface UserQueryParams {
  username?: string;
  status?: number;
  pageNum?: number;
  pageSize?: number;
}

/**
 * 获取用户信息
 * 如果后端没有提供此接口，可以返回 null 或者从登录信息中获取
 */
export async function getUserInfoApi(): Promise<null | UserInfo> {
  try {
    return await requestClient.get<UserInfo>('/system/api/user/info');
  } catch {
    // 如果接口不存在，返回 null，让系统使用登录时存储的用户信息
    return null;
  }
}

/**
 * 更新用户信息
 */
export async function updateUserInfoApi(data: Partial<UserInfo>) {
  return requestClient.put<UserInfo>('/system/api/user/info', data);
}

/**
 * 修改密码
 */
export async function changePasswordApi(data: {
  newPassword: string;
  oldPassword: string;
}) {
  return requestClient.post('/system/api/user/change-password', data);
}

/**
 * 上传用户头像
 */
export async function uploadAvatarApi(file: File) {
  const formData = new FormData();
  formData.append('file', file);
  return requestClient.post<{ url: string }>(
    '/system/api/user/avatar',
    formData,
    {
      headers: {
        'Content-Type': 'multipart/form-data',
      },
    },
  );
}

/**
 * 获取用户列表（分页）
 */
export async function getUserListApi(params: UserQueryParams) {
  // 构建请求参数，确保字段类型匹配后端
  const requestParams: any = {
    pageNum: params.pageNum || 1,
    pageSize: params.pageSize || 10,
  };

  // 添加查询条件（只添加有值的字段）
  if (params.username) {
    requestParams.username = params.username;
  }
  if (params.status !== undefined && params.status !== null) {
    requestParams.status = params.status;
  }

  return requestClient.post<PageResult<User>>('/system/api/user/page', requestParams);
}

/**
 * 获取用户详情
 */
export async function getUserDetailApi(id: number) {
  return requestClient.get<User>(`/system/api/user/${id}`);
}

/**
 * 新增用户
 */
export async function addUserApi(data: User) {
  return requestClient.post('/system/api/user/add', data);
}

/**
 * 编辑用户
 */
export async function updateUserApi(data: User) {
  return requestClient.put('/system/api/user/edit', data);
}

/**
 * 删除用户
 */
export async function deleteUserApi(id: number) {
  return requestClient.delete(`/system/api/user/delete/${id}`);
}

/**
 * 重置用户密码
 */
export async function resetPasswordApi(id: number, newPassword: string) {
  return requestClient.post(`/system/api/user/${id}/reset-password`, {
    newPassword,
  });
}

/**
 * 角色分配信息中的角色数据
 */
export interface RoleAssignInfo {
  id: number;
  roleCode: string;
  roleName: string;
  description?: string;
  status: number;
  checked: boolean; // ✅ 修改：使用 checked 字段表示是否已分配
  createBy?: number;
  createTime?: string;
  updateBy?: number;
  updateTime?: string;
  createName?: string;
  updateName?: string;
}

/**
 * 获取用户的角色分配信息
 * 返回所有角色列表，checked 字段表示该用户是否已分配该角色
 */
export async function getUserRoleAssignInfoApi(userId: number) {
  return requestClient.get<RoleAssignInfo[]>(
    `/system/api/role/getUserRoles`,
    {
      params: userId ? { userId } : {},
    },
  );
}

/**
 * 分配用户角色
 */
export async function assignUserRolesApi(userId: number, roleIds: number[]) {
  return requestClient.post(`/system/api/role/assignRoles`, {
    id: userId,
    roleIds,
  });
}
